package po

import (
	"encoding/json"
	"io"
	"time"
)

type ConfigFile struct {
	IsUploads bool      `json:"is_uploads" yaml:"is_uploads"`
	FileName  string    `json:"file_name" yaml:"file_name"`
	UserId    string    `json:"user_id" yaml:"user_id"`
	Reader    io.Reader `json:"reader" yaml:"reader"`
}

type Config struct {
	Id              int64        `json:"id"`
	Name            string       `xorm:"name" json:"name"`
	Describe        string       `xorm:"describe" json:"describe"`
	Property        string       `xorm:"property" json:"property"`
	Kind            string       `xorm:"kind" json:"kind"`
	Version         string       `xorm:"version" json:"version"`
	DetailRepoValue ConfigDetail `xorm:"detail" json:"detail"`
	Created         time.Time    `xorm:"created" json:"created"`
	Updated         time.Time    `xorm:"updated" json:"updated"`
	Deleted         time.Time    `xorm:"deleted" json:"-"`
}

type ConfigToUser struct {
	Id       int64
	ConfigId int64  `xorm:"config_id"`
	UserId   string `xorm:"user_id"`
	GroupId  int64  `xorm:"group_id"`
}

func (r ConfigToUser) TableName() string {
	return "srvp_config_to_user"
}

type ConfigDetail struct {
	Charts   interface{} `json:"charts"`    // 如果目标配置kind是helm charts，则该字段不为空
	KubeYaml interface{} `json:"kube_yaml"` // 如果目标配置kind是kube pod，则该段不为空

	OptionJaeger  string `json:"option_jaeger"`  // 是否启用jaeger监控
	OptionLinkerd string `json:"option_linkerd"` // 是否启用linkerd监控
	OptionFlame   string `json:"option_flame"`   // 是否启用火焰图性能监控
}

func (r *ConfigDetail) FromDB(data []byte) error {
	return json.Unmarshal(data, r)
}

func (r *ConfigDetail) ToDB() ([]byte, error) {
	return json.Marshal(r)
}
